/*
 * TacticaBigOrc.java
 *
 * Created on 14 de marzo de 2007, 15:38
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007.BigOrcClub;

import futbol.tacticas.*;
import futbol.tacticas.concursantes.Tactica;

import java.awt.Color;
import java.awt.Point;
import java.util.Vector;
/**
 *
 * @author Usuario
 */
public class TacticaBigOrc  implements Tactica{
    
        private int nValores[][]={
        {-152,0,5},
        {30,-2,7},
        {-120,57,6},
        {-100,-40,6},        
        {-96,19,6},
        {20,100,5},
        {-20,35,4},
        {-20,-25,4},
        {20,-100,5},
        {90,17,4},
        {99,-29,4}
    };
    /** Creates a new instance of TacticaBigOrc */
    public TacticaBigOrc() {
    }
    
            public String getNombre(){
        return "Big Orc Club";
    }
    
    public Color getColor1(){
        return Color.black;
    }
    
    public Color getColor2(){
        //return new Color(30,140,255);
         return Color.red;
    }
    
    public Color getColorNumero(){
        return Color.green;
    }
    
    public int getFuerza(int n){
        return nValores[n][2];
    }
    public int getXInicial(int n){
        return nValores[n][0];
    }
    
    public int getYInicial(int n){
        return nValores[n][1];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj){
        
        Point[] misJugadores=sj.getMisJugadores();
        Point[] contrario=sj.getContrario();
        
        Vector<Comando> comandos=new Vector();
        for (int n=0;n<11;n++)
            comandos.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));
        
        int nJug=sj.getMasCercanoDeBola();
        Point bola=sj.getBola();
        comandos.add(new ComandoIrA(nJug, bola.getX() , bola.getY()));
        
        
        //Movimiento portero
        int y=(int)(bola.getY()/2);
        if (y<-25) y=-25;
        if (y>25) y=25;
        comandos.add(new ComandoIrA(0,-155, y));
        
        
        //solo tiran a puerta el jugador 2
        //todos los dems pasan al 2
        for (int n=0;n<11;n++)
            if(n==1)
            comandos.add(new ComandoTiroAPuerta(n,0));
            else
            {
           if(!enMedio(misJugadores[n],misJugadores[1],contrario))
                comandos.add(new ComandoPase(n,1));
           else
                if(!enMedio(misJugadores[n],misJugadores[7],contrario))
                    comandos.add(new ComandoPase(n,7));
                else
                     if(!enMedio(misJugadores[n],misJugadores[6],contrario))
                         comandos.add(new ComandoPase(n,6));
            }
        return comandos;
    }
    
    //devuelve verdadero si hay un contrario entre dos jugadores de mi equipo
    //m1 y m2 representas la pendiente de la funcin de la recta dibujada entre dos puntos.
    //teniendo en cuenta que las dos rectas tienen el mismo punto de origen, si m1==m2 las dos rectas son iguales 
    private boolean enMedio(Point pasador,Point receptor,Point[] contrario)
    {
    double m1,m2;
    boolean respuesta =false;
    m1=(pasador.getY()-receptor.getY())/(pasador.getX()-receptor.getX());
    for(int n=0;n<11;n++)
        {         
        m2=(pasador.getY()-contrario[n].getY())/(pasador.getX()-contrario[n].getX());
        
        if(m1==m2)
            {respuesta = true; 
             //System.out.println("si es true pasa al portero ");
             break;}
        }
   
     return respuesta;
    }
}
